import org.apache.commons.lang.RandomStringUtils
class InscricaoService {
    static transactional = true
    def conexoesService
    def authenticateService

    def  public  idInscricao() {
        def result =  Inscricao.findAll('sort':'contadorId','order':'desc')[0]
        if (result) {
            return result.contadorId  + 1
        }
        else return 1
    }


    def inscreve(params){
        def inscricaoInstance = new Inscricao()
        inscricaoInstance.properties = params
        inscricaoInstance.chave = RandomStringUtils.randomAlphanumeric(8)
        inscricaoInstance.usuario =  new Usuario(
            params.username,
            params.userRealName,
            params.passwd,
            params.pass,
            params.email,
            params.email2
        )

        if (inscricaoInstance.save()) {
            inscricaoInstance.usuario.save()
            Inscricao.contador ++
            def role_web = Permissao.get(2)
            role_web.addToPeople(inscricaoInstance.usuario)
            role_web.save()
            enviarEmail(inscricaoInstance,
    "http://localhost:8080/sms.contratualizacao.v2/inscricao/confirmacao")
            flash.message = "Instituicao cadastrada com sucesso"
            redirect(action: "aviso")
            
        } else {
            render(view: "create", model: [inscricaoInstance: inscricaoInstance, usuarioInstance: inscricaoInstance.usuario])
        }
    }

    def atualizaPorCnpj(cnpj) {
        def sql = """
SELECT nome_fanta as nome ,
       logradouro || ',' || numero
|| ',' ||  bairro as endereco,
        cnes as cnes
FROM "cnes"."lfces004"
where cnpj = '"""+ cnpj +"""'
LIMIT 1
"""
        def result = []
        conexoesService.sis().eachRow(sql,{
                result.add(
'nome': it.nome,
'cnes': it.cnes,
'endereco':it.endereco
                )
            })
        return result
    }

    def atualizaPorCnes(cnes) {
        def sql = """
SELECT  nome_fanta as nome ,
       logradouro || ',' || numero
|| ',' ||  bairro as endereco,
          cnpj as cnpj
FROM  "cnes"."lfces004"
where cnes  = '"""+ cnes +"""'
LIMIT 1
"""
        def result = []
        conexoesService.sis().eachRow(sql,{
                result.add(
'nome': it.nome,
'cnpj': it.cnpj,
'endereco':it.endereco
                )
            })
        return result
    }

    def ajaxEdit(id) {
        def inscricaoInstance = Inscricao.get(id)
        def inscricaoInstanceAcompanhamento = InscricaoAcompanhamento.findAllByInscricao(inscricaoInstance ,['sort':'id','order':'desc'])[0]
        def  usuario = Usuario.findByUsername(authenticateService.principal().getUsername())
        def itens = []
        InscricaoItens.findAll(['sort':'letra','order':'asc']).each{
            def inscricaoAcompanhamento = InscricaoAcompanhamentoItens.findByInscricaoAcompanhamentoAndInscricaoItens(inscricaoInstanceAcompanhamento,it,['sort':'id','order':'desc'] )
            def status
            def obs
            if (inscricaoAcompanhamento)    {
                status = inscricaoAcompanhamento.status
                obs = inscricaoAcompanhamento.obs
            }
 
            itens.add('item':it,'status':status,'obs':obs)
        }

      

        if (inscricaoInstance && usuario ) {

            return [inscricaoInstance:inscricaoInstance,inscricaoInstanceAcompanhamento:inscricaoInstanceAcompanhamento,usuario:usuario,itens:itens]
        } else {
            erro provocado }

       


    }

    def menssagemRevisao() {
        def liberacao = Liberacao.list(['sort':'id','order':'desc'])[0]
        if (liberacao ) {
            liberacao = liberacao.faseUm
        } else {
            liberacao = false
        }
        def todosOsintensPreenchidos  = false
        def inscricaoInstanceList = []
        def itens = InscricaoItens.count()
        Inscricao.list('sort':'id' , 'order':'asc').each {
            def inscricaoAcompanhamentoFind =  InscricaoAcompanhamento.findAllByInscricao(it,['sort':'id','order':'desc'])[0]
            def inscricaoAcompanhamentoItensCount =itens - InscricaoAcompanhamentoItens.countByInscricaoAcompanhamentoAndStatusNotEqual(inscricaoAcompanhamentoFind ,'999')

          

            if (inscricaoAcompanhamentoItensCount < 1 ) {
                todosOsintensPreenchidos = true
            }

            def revisaoDeEmailNormal = RevisaoDeEmail.findAllByInscricaoAcompanhamentoAndMensagemBetween(inscricaoAcompanhamentoFind,1,9,['sort':'id','order':'desc'])[0] // Apenas Revisado 1 nao revisado, 2 revisado mais email nao enviado , 3 revisado e email enviado
            def revisaoDeEmailRecurso = RevisaoDeEmail.findAllByInscricaoAcompanhamentoAndMensagemBetween(inscricaoAcompanhamentoFind,4,6,['sort':'id','order':'desc'])[0]  // Revisado na fase de Recurso , 4 recurso nao conferido , 5 recurso conferido mais e-mail nao enviado , 6 e-mail de recurso enviado



            

            // ve se depois do e-mail enviado foi relizado um recurso
            def recurso 

            if (revisaoDeEmailRecurso) {
                recurso = true
            }

 
            inscricaoInstanceList.add('inscricao' : it ,
                                      'acompanhamento' : inscricaoAcompanhamentoFind,
                                      'itens': InscricaoAcompanhamentoItens.findAllByInscricaoAcompanhamento(inscricaoAcompanhamentoFind) ,
                                      'podeSerLiberado' : todosOsintensPreenchidos ,
                                      'liberadoPeloGestor':liberacao ,
        'revisadoResultado':  revisaoDeEmailNormal
                                  ,

            'recurso': recurso
            )
        }

        return ['inscricaoInstanceList':inscricaoInstanceList]

    }



    def revisao(id) {
       def usuario = Usuario.findByUsername(authenticateService.principal().getUsername());
       def inscricao  =    Inscricao.get(id);
       def inscricaoAcompanhamento = InscricaoAcompanhamento.findAllByInscricao(inscricao , ['sort': 'id' , 'order':'desc'])[0];
       def inscricaoAcompanhamentoItens = InscricaoAcompanhamentoItens.findAllByInscricaoAcompanhamentoAndStatusBetween(inscricaoAcompanhamento,200,300,['sort':'inscricaoItens','order':'asc']);
       def revisaoDeEmail = RevisaoDeEmail.findAllByInscricaoAcompanhamentoAndMensagemBetween(inscricaoAcompanhamento,1,9,['sort':'id','order':'desc'])[0]
       Date data = new Date()
        return [usuario:usuario,inscricao:inscricao,inscricaoAcompanhamento:inscricaoAcompanhamento,
           inscricaoAcompanhamentoItens:inscricaoAcompanhamentoItens,revisaoDeEmail:revisaoDeEmail , data : data];
    }



    def enviaEmailResultado(id,recurso) {

  
 
def revisaoDeEmail = RevisaoDeEmail.get(id)
def inscricaoAcompanhamentoItens = InscricaoAcompanhamentoItens.findAllByInscricaoAcompanhamentoAndStatusBetween(revisaoDeEmail.inscricaoAcompanhamento,200,300,['sort':'inscricaoItens','order':'asc']);

def html =  """
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Sample title</title>
    <style type="text/css">
      h1 {
      text-align: center;
      font-size: 15px;
      }
      .list {
        text-align: justify;
        width: 500px;
}
.green{
    background: green;color: #ffffff;
    color:white;
    font-weight: bolder;
}
      </style>
  </head>
  <body>
     <g:form>
    <div class="list"> 
    <center><img src="http://www.sms.fortaleza.ce.gov.br/sms_v2/Imagens/Layout/topoL2C1_logomarcaPMF.gif" /></center>
    <h1>SMS - INSCRI&Ccedil;&Atilde;O ON-LINE</h1>
    <p>
    <h1>   COMUNICADO DA FASE 1 DE  ${revisaoDeEmail.inscricaoAcompanhamento.status == 2 ? ' ' : 'NÃO'}  CONFORMIDADE </h1>
    </p>
    Fortaleza , ${OperacoesComData.getHoje()}.    
    <p>
Prezado Candidato,
    </p>

  <g:if test="${recurso}">
         <p>
    Comunicamos que seu recurso foi  ${revisaoDeEmail.inscricaoAcompanhamento.status == 2 ? '<font style="color:red;font-weight: bolder" > deferido </font>' : '<font style="color:red;font-weight: bolder" > indeferido </font>'}  ,
    ${revisaoDeEmail.inscricaoAcompanhamento.status == 2 ? 'viabilizando ' : 'inviabilizando'}
    sua participação na Fase 2 da Contratualiza&ccedil;&atilde;o de Servi&ccedil;os de Sa&uacute;de do município de Fortaleza
    ${revisaoDeEmail.inscricaoAcompanhamento.status == 2 ? '. ' : ', considerando:'}
</p>

   </g:if> <g:else>
    <p>
    Comunicamos que sua documenta&ccedil;&atilde;o ${revisaoDeEmail.inscricaoAcompanhamento.status == 2 ? '' : '<font style="color:red;font-weight: bolder" > não </font>'}  apresenta as conformidades exigidas,
    ${revisaoDeEmail.inscricaoAcompanhamento.status == 2 ? 'viabilizando ' : 'inviabilizando'}
    sua participação na Fase 2 da Contratualiza&ccedil;&atilde;o de Servi&ccedil;os de Sa&uacute;de do município de Fortaleza
    ${revisaoDeEmail.inscricaoAcompanhamento.status == 2 ? '. ' : ', considerando:'}
</p>
</g:else>





""" 
        
 inscricaoAcompanhamentoItens.each {
     
      html += """
  <font style="font-weight: bold;">
Item:</font> ${it.inscricaoItens.letra} ,
    <br>
    <br>
${it.inscricaoItens.descricao},
<font style="color:red;font-weight: bolder">
${InscricaoAcompanhamentoItens.menssagens(it.status)}.
</font>
<br>
<font style="font-weight: normal">
   ${it.obs.length() - OperacoesComTexto.contaEspacos(it.obs  ) > 0 ? '<font style="font-weight: bolder"> Observação:</font>' + it.obs :'' }
</font>
"""            
 }
 html += """
         <br>
    </g:each>
    </g:if>
</p>
<p>
 ${revisaoDeEmail.inscricaoAcompanhamento.status == 2 && !recurso ? '''
 
    A Comissão de Contratualização de Serviços de Saúde informa que o
    candidato tem um prazo de <font style="color:red;font-weight: bolder" > três dias úteis </font>,
    segundo Edital de Chamamento P&uacute;blico item 3.1.2, alínea "c", para encaminhar recurso solicitando revisão
    da sua documentação.
''' : '' 
        } 
 </p>
</g:if>
<p>
Agradecemos sua participação e colabora&ccedil;&atilde;o.
</p>
<br>
Atenciosamente,
<br>
Comissão de Contratualiza&ccedil;&atilde;o de Servi&ccedil;os de Sa&uacute;de do município de Fortaleza
  </div>
      <br>
 </g:form>
  </body>
</html>
"""

 def usuario = Usuario.findByUsername(authenticateService.principal().getUsername());

 return  [html:html , mail: revisaoDeEmail.inscricaoAcompanhamento.inscricao.usuario.email ,revisaoDeEmail:revisaoDeEmail , usuario:usuario ]

   

    }
 

     



}
